package demo;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.lang.reflect.Method;

public class TestMain {
    public static void test0() throws Exception
    {
        //java 反射机制,通过类名称获取类对象 @@， 并打印
        

        //调用类的构造器创建对象obj (也就是 bean)
        Object obj = cls.newInstance();
        
        //获取setIntValue()方法 @@
        
        //调用bean实例的setIntValue()方法 @@
        
        // 获取getIntValue()方法，并调用 @@
        
        // 获取setDoubleValue()方法，并调用 @@
        
        // 获取getDoubleValue()方法，并调用 @@

    }
    public static void test1() throws InterruptedException
    {
        
        ApplicationContext ctx = new ClassPathXmlApplicationContext("bean_lec02.xml");
        
        String[] li = {"p1", "p2"};
        // bean的默认scope 是 Singleton
        // p1, p2分别对应 singleton、prototype 模式创建

        for (String s : li) {
            Person sp1 = (Person)ctx.getBean(s);
            Person sp2 = (Person)ctx.getBean(s);
            //cloze 对比 p1 p2 对象是否完全相同  @@
            
        }

        java.util.Date d1 = (java.util.Date)ctx.getBean("date_proto");
        Thread.sleep(1000); // 停顿1000毫秒、即1秒
        java.util.Date d2 = (java.util.Date)ctx.getBean("date_proto");
        // cloze 对比singleton、prototype 模式创建的bean 对象的日期 是否相等， 日期的打印输出 @@

    }

    public static void test2()
    {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("bean_lec02.xml");
        ExampleBean eb = (ExampleBean)ctx.getBean("eb1");
        System.out.println(eb.getIntValue()); // 普通值注入，注意 注入的值使用  ""
        System.out.println(eb.getDoubleValue()); // 试试 如果注入一个 非double类型的值或者非值的字符串会发生什么？
    }

    public static void test3()
    {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("bean_lec02.xml");
        Person p = (Person)ctx.getBean("p4"); // 自动装配注入的对象 是 byType还是byName，如何去验证。。？
        System.out.println(p.toString()); 
    }

    public static void test4()
    {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("bean_lec02.xml");
        Student s = (Student)ctx.getBean("s1", Student.class);
        System.out.println(s.toString());
    }

    public static void main(String[] args) throws Exception
    {
        test0();
        test1();
        test2();
        test3();
        test4();
    }
}
